# 在OOP程序设计中，当我们定义一个class的时候，可以从某个现有的class继承，新的class称为子类（Subclass），
# 而被继承的class称为基类、父类或超类（Base class、Super class）。


class Animal(object):
    def __init__(self, name, color):
        self.name = name
        self.color = color

    def run(self):
        return '%s is moving !' % self.name


class Dog(Animal):
    def run(self):  # 会覆盖父类的方法
        return '%s is running !' % self.name


class Cat(Animal):
    def run(self):  # 会覆盖父类的方法
        return '%s is jumping !' % self.name


d1 = Animal('DogKing', 'Black')
c1 = Cat('CatQueen', 'White')
# print(d1.run())
# print(c1.run())


class Tortoise(Animal):
    def run(self):
        print('Tortoise is running slowly...')


class Timer(object):
    def run(self):
        return 'Start...'


def run_twice(animal):
    return animal.run()


print(run_twice(d1))
print(run_twice(Dog('Dog', 'yellow')))
print(run_twice(Cat('Cat', 'blue')))
print(run_twice(Timer()))
